
import pandas as pd
import os

def export_missing_data_by_indicator(input_file, output_root_dir, indicators=None, file_format='csv'):
    """
    将指标总表中存在缺失值的指标按国家拆分导出为 CSV，便于后续独立填补。
    :param input_file: 指标总数据文件路径（.csv）
    :param output_root_dir: 输出根目录（自动创建子目录）
    :param indicators: 指定待检查的指标列表（若为 None，则自动识别所有数值型指标）
    :param file_format: 输出格式（目前仅支持 'csv'）
    """
    # 加载数据（根据扩展名判断格式）
    if input_file.endswith('.csv'):
        df = pd.read_csv(input_file, encoding='utf-8-sig')
    else:
        df = pd.read_excel(input_file)

    # 自动识别数值型指标列（排除前4列）
    if indicators is None:
        indicators = df.select_dtypes(include=['float64', 'int64']).columns.tolist()
        indicators = [col for col in indicators if col not in ['序号', 'Year']]

    # 国家列表
    country_list = df['国名Ch'].dropna().unique()

    # 输出目录（子目录）
    output_dir = os.path.join(output_root_dir, "to_fill_by_indicator")
    os.makedirs(output_dir, exist_ok=True)

    # 拆分并导出缺失数据
    for indicator in indicators:
        missing_data = []
        for country in country_list:
            subset = df[df['国名Ch'] == country]
            if indicator in subset.columns and subset[indicator].isna().any():
                subset_out = subset[['序号', '国名En', '国名Ch', 'Year', indicator]].copy()
                missing_data.append(subset_out)

        if missing_data:
            combined_df = pd.concat(missing_data)
            output_file = os.path.join(output_dir, f"{indicator}_missing_data.csv")
            try:
                combined_df.to_csv(output_file, index=False, encoding='utf-8-sig')
                print(f"✅ 已导出：{output_file}")
            except Exception as e:
                print(f"❌ 导出失败：{output_file}")
                print(f"错误详情：{e}")
